﻿package kioschool.model{
	import flash.errors.IllegalOperationError;
	
	import kioschool.view.IStepView;

	/**
	 * Интерфейс шага алгоритма
	 */ 
	public class AbstractStep
  	{
		/**
		 * Призна корректности
		 */ 
		private var _correct:Boolean = true;
		
		public function get correct():Boolean{
			return _correct;
		}
		
		public function set correct(cor:Boolean):void{
			_correct = cor;
		}
		
		
		/**
		 * Получает следующий шаг
		 */
		public function next():AbstractStep{
			throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
			return null;
		}
		
		/**
		 * Решает шаг - выполняется в режиме демонстрации при переходе на следующий шаг
		 */
		public function oracle():void{
			throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
		}
		
		/**
		 * Проверяет действия пользователя на данном шаге - выполняется в режиме тренировки и контроля при переходе на следующий шаг
		 */
		public function checkInput():String{
			throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
			return null;
		}
		
		/**
		 * Откат действия данного шага - выполняется при переходе на предыдущий шаг
		 */ 
		public function restore():void{
			
		}
		
		/**
		 * Откатывает действия, сделанные на данном шаге - выполняется при переходе на этот шаг при прокрутке назад  
		 */ 
		public function antiOracle():void{
			throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
		}
		
		/**
		 * Выполняется при переходе на данный шаг как при прокрутке вперед, так и при прокрутке назад  
		 */
		public function update():void{
			
		}
		
		/**
		 * Возвращает представления для данного шага - будет отображено на панели
		 */ 
		public function getView():IStepView{
			throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
			return null;			
		}
		
		/**
		 * Возвращает комментарий для данного шага
		 */
		public function get comment():String{
			throw new IllegalOperationError("Abstract method: must be overridden in a subclass");
			return null;	
		}
	}
}